Field of the Invention
The present invention relates to the field of distributed computing and in particular, to apparatus, systems, and methods to dynamically and adaptively deploy applications on distributed computing systems in accordance with user-specified criteria to optimize performance while lowering the cost of deployment.
Description of Related Art
The performance of computing applications may often be increased by distributing the computational workload across nodes in a cluster of computers. A physical cluster of computers is often referred to as a “cloud” or “cloud infrastructure” or simply an infrastructure. Clouds often permit their underlying physical hardware, which can include servers, memory, storage, and network resources, to be viewed as virtualized units. These virtualized units represent some fraction of the underlying computing hardware or resources supported by the cloud. Therefore, from a logical perspective, clouds may be viewed as a collection of virtual machines (“VMs”). A “cloud node” or “node” may be responsible for the control and operation of some fraction of the VMs, and there may be several nodes per cloud.
Increasingly, applications that have been traditionally tied to physical hardware are now being migrated, provisioned and deployed on such virtualized cloud infrastructures. For cloud based applications, virtual machines and virtual clusters are often used to provision cloud based software instead of directly mapping the application to actual physical hardware. In cloud-computing infrastructures that use virtualization, a variety of automated placement strategies and/or techniques are used to dynamically map the virtual resources (such as the virtualized machines, clusters, storage etc.) used by the cloud based application onto the underlying physical hardware. Cloud based applications provisioned with virtualized resources are typically unaware of the corresponding actual physical mapping and allocation of resources.
One drawback of virtualization is that it is difficult to model the performance of applications both (i) on a specific cloud and (ii) when an application migrates from one cloud to another because of the lack of uniformity and the lack of transparency in the placement, allocation, and mapping of virtual resources to corresponding hardware resources in/between clouds.
For example, the performance of an input-output (I/O) intensive distributed application that requires all-node access to shared storage will be cloud-dependent and depend on the method by which the underlying shared storage has been implemented on a cloud. In addition, performance may vary across clouds because a quad-core virtual machine on Cloud A may be very different from a quad-core virtual machine on Cloud B in terms of the actual physical processor cores that will be made available on the respective clouds.
Further, load balancing or placement strategies may contribute to variations in application performance across clouds. For example, as cloud workload increases, Cloud B may see more rapid performance degradation relative to Cloud C because of differences in how the respective clouds distribute virtual machine workload across physical cloud resources. However, application performance may vary even on a specific cloud because the allocation of physical resources to an application may vary based on the total cloud workload. For example, in heavily loaded clouds many virtual machines may be sharing the same physical infrastructure resulting in performance degradation of the applications running on the virtual machines.
With the advent of utility like on-demand public cloud-computing infrastructures, the monetary cost of running applications on clouds creates additional layer of uncertainty because pricing variations between clouds can contribute to a significant cost difference when running an application even when the clouds offer similar application performance. Various other cloud metrics such as security, cloud availability, application uptime, and cloud reliability may also be important to users of public cloud-computing infrastructures.
For a user running a cloud-based application, the lack of transparency in mapping virtual machines to physical resources as well as the differences and variability in performance, features, and pricing between cloud infrastructures creates challenges in the apriori selection of a cloud and a configuration within that cloud that balances various user criteria and delivers optimal price-performance.
Therefore, there is a need for apparatus, systems, and methods to dynamically and adaptively deploy applications on distributed computing systems in accordance with user-specified criteria to optimize performance while lowering deployment cost.